C#

C# 도움 정보

 

  1. 작업 목록 (Task List)
  2. JSON Async
  3. 윈도우11 오른쪽 하단 트레이 배터리 잔량 백분율 표시하기

 


 

    1. 작업 목록 (Task List)

 

– 토큰을 사용해서 코드 주석을 추적하는 기능

 

작업 목록을 열려면

1. View > Task List
2. Ctrl+\,T.

 

토큰과 주석 문법

1. 주석 마커 (//)
2. 토큰 (TODO)
3. 주석

예)
// TODO: Load state from previously suspended application

 

커스텀 토큰

# 기본 적으로 미리 정의된 토큰
HACK, TODO, UNDONE, and UnresolvedMergeConflict.

# 커스텀 토큰을 만들려면
1. Tools > Options > Environment > Task List
2. 우선순위 설정 가능 (높으면 위로, 낮으면 아래로 표시됨)

 

Shortcuts

– 작업 목록에서 추적할 수 있는 코드 창에서의 북마크

# shortcut 만들기
1. Edit > Bookmars > Add Task List Shortcut
2. Ctrl + K, H

# shortcut 탐색
View > Next Task, Previous Task

 

https://learn.microsoft.com/en-us/visualstudio/ide/using-the-task-list?view=vs-2022

https://www.youtube.com/shorts/nj-x9mjXW9I

 


 

    2. JSON Async

 

public class SearchRoot
{
    public Search[] Search { get; set; }
    [JsonProperty(PropertyName = "totalResults")]  // 실제로는 totalResults 이나 C# 네이밍 규칙 맞추기 위해서..
    public string TotalResults { get; set; }
    public string Response { get; set; }
}


public static class Json
{
    public static async Task<T> ToObjectAsync<T>(string value)
    {
        return await Task.Run(() =>
        {
            return JsonConvert.DeserializeObject<T>(value);
        });
    }

    public static async Task<string> StringifyAsync(object value)
    {
        return await Task.Run(() =>
        {
            return JsonConvert.SerializeObject(value);
        });
    }
}

var result = await client.GetStringAsync(url);
var searchRoot = await Json.ToObjectAsync<SearchRoot>(result);

// From Windows Template Studio

 

 


 

    3. 윈도우11 오른쪽 하단 트레이 배터리 잔량 백분율 표시하기

 

 

# 1.2 소스

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace percentage
{
    class TrayIcon
    {
        [DllImport("user32.dll", CharSet=CharSet.Auto)]
        static extern bool DestroyIcon(IntPtr handle);

        private const int fontSize = 18;
        private const string font = "Segoe UI";

        private NotifyIcon notifyIcon;

        public TrayIcon()
        {
            ContextMenu contextMenu = new ContextMenu();
            MenuItem menuItem = new MenuItem();

            notifyIcon = new NotifyIcon();

            contextMenu.MenuItems.AddRange(new MenuItem[] { menuItem });

            menuItem.Click += new System.EventHandler(MenuItemClick);
            menuItem.Index = 0;
            menuItem.Text = "E&xit";

            notifyIcon.ContextMenu = contextMenu;
            notifyIcon.Visible = true;

            Timer timer = new Timer();
            timer.Interval = 1000;
            timer.Tick += new EventHandler(TimerTick);
            timer.Start();
        }

        private Bitmap GetTextBitmap(String text, Font font, Color fontColor)
        {
            SizeF imageSize = GetStringImageSize(text, font);
            Bitmap bitmap = new Bitmap((int)imageSize.Width, (int)imageSize.Height);
            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                graphics.Clear(Color.FromArgb(0, 0, 0, 0));
                using (Brush brush = new SolidBrush(fontColor))
                {
                    graphics.DrawString(text, font, brush, 0, 0);
                    graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                    graphics.Save();
                }
            }
            return bitmap;
        }

        private static SizeF GetStringImageSize(string text, Font font)
        {
            using (Image image = new Bitmap(1, 1))
            using (Graphics graphics = Graphics.FromImage(image))
                return graphics.MeasureString(text, font);
        }

        private void MenuItemClick(object sender, EventArgs e)
        {
            notifyIcon.Visible = false;
            notifyIcon.Dispose();
            Application.Exit();
        }

        private void TimerTick(object sender, EventArgs e)
        {
            PowerStatus powerStatus = SystemInformation.PowerStatus;
            String percentage = (powerStatus.BatteryLifePercent * 100).ToString();
            bool isCharging = SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online;
            String bitmapText = isCharging ? percentage + "*" : percentage;
            using (Bitmap bitmap = new Bitmap(GetTextBitmap(bitmapText, new Font(font, fontSize), Color.White)))
            {
                System.IntPtr intPtr = bitmap.GetHicon();
                try
                {
                    using (Icon icon = Icon.FromHandle(intPtr))
                    {
                        notifyIcon.Icon = icon;
                        String toolTipText = percentage + "%" + (isCharging ? " Charging" : "");
                        notifyIcon.Text = toolTipText;
                    }
                }
                finally
                {
                    DestroyIcon(intPtr);
                }
            }
        }
    }
}

 

 

https://github.com/kas/percentage

 

시작프로그램에 등록해야만 재부팅시 자동으로 표시됩니다.

시작메뉴 경로인

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

이곳에 다운 받으신 파일을 넣어주면 됩니다.

 

https://www.clien.net/service/board/lecture/17827548?od=T31&po=0&category=0&groupCd=

 

 


 

 

 

Related posts

Leave a Comment